/*! \file InPerAlb.h
    \brief Interface do modulo Percistencia de Albuns.
 */

#ifndef PerAlb
#define PerAlb

#ifdef PerAlb_Serv
#define ExtPA
#else
#define ExtPA extern
#endif

/*! \def ARQUIVO_PF
    \brief O nome do arquivo do Banco de dados usuario
*/

/*! \def NARQUIVO_PF
    \brief A type definition for a .
*/

/*! \def TAMANHOREG_PF
    \brief A type definition for a .
*/

/*! \def VARIAVELCONTROLE_PF
    \brief A type definition for a .
*/

/*! \def EXTENCAO_PF
    \brief ------------------------.
*/

#define ARQUIVO_PA "Album.txt"
#define NARQUIVO_PA "Album"
#define TAMANHOREG_PA 74
#define EXTENSAO_PA ".txt"
#define VARIAVELCONTROLE_PA '$'

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "InVetBit.h"

/**
   \struct Album_M
   \brief Essa e a estrutura que classifica o usario no contexto modulo de persistencia usuario variaveis
 */
struct Album_M {
    char CpfUser[12];   /**< Um vetor de caracteres com 12 posicoes que quarda o cpf do usuario a quem o album pertence*/
    char Codig[11];     /**< Um vetor de caracteres com 11 posicoes que quarda o codigo do Album */
    char Nome[16];      /**< Um vetor de caracteres com 15 posicoes que quarda o nome do Album*/
    char Descr[31];     /**< Um vetor de caracteres com 31 posicoes que quarda a descriçao do Album*/
    int NumerFotos;     /**< um inteiro que quarda o numero de fotos que fotos que o Album contem */
    int Priva;          /**< int que diz o nivel de privacidade \n 1 = privado \n 0 = publico*/
};

/*! \var typedef struct Album_M AlbumPA
    \brief Representacao do Album no centexto Modulo Percistencia Album
 */
typedef struct Album_M Album_PA;

/*! \fn ExtPA Album* PegaAlbum (const char* CpfPass, const char* CodigPass, Album_PA* AlbumPego);
   \brief Responsavel por pencher uma struct album.
   \param CpfPass: o cpf do ususario a quem o album pertence.
   \param CodigPass : o codigo do album a ser retornado.
   \param AlbumPego : o Album que sera prenchido.
   \return Um int que funciona com "bool":\n
      0 -  Album prenchido sucesso. \n
     -1 -  Erro no arquivo.\n
	 -2 - Album nao existente.
*/
ExtPA int PegaAlbum_PA(const char* CpfPass, const char*, Album_PA*);

/*! \fn ExtPA int AtualizaAlbum (Album_PA* NovoAlbum)
   \brief Responsavel por atualizar os album do Banco de Dados
   \param AlbumPego : o Album com os novos dados.
   \return Um int que funciona com "bool":\n
      0 -  Album atualizado sucesso. \n
     -1 -  Erro de Banco de dados.\n
	 -2 - Album nao existente.
*/
ExtPA int AtualizaAlbum_PA(Album_PA*);

/*! \fn ExtPA int DeletaAlbum(const char* CpfPass, const char* CodigPass);
   \brief Responsavel por deletar certo album.
   \param CpfPass : o cpf do ususario a quem o album pertence.
   \param CodigPass : o codigo do album a ser deletado.
   \return Um int que funciona com "bool":\n
      0 -  Album deletado sucesso. \n
     -1 -  Erro de Banco de dados.\n
	 -2 - Album nao existente.
*/
ExtPA int DeletaAlbum_PA(const char*, const char*);

/*! \fn ExtPF int AddAlbum_PA (Album_PA* NovoAlbum);
   \brief Responsavel por adicionar um novo album ao banco de dados.
   \param NovoAlbum : um Album prechido para gravacao.
   \return Um int que funciona com "bool":\n
     PO -  Album adcionado com sucesso.\n
     -1 -  Erro de Banco de dados.\n
	 -2 -  Album ja existente.
*/
ExtPA int AddAlbum_PA(Album_PA*);

/*! \fn ExtPF int RetiraFoto_PA (const char* CpfPass, const char* CodigPass)
   \brief Responsavel por decrementar o numero de fotos desse usuario.
   \param CpfPass : O cpf do ususario dono o album pertence.
   \param CodigPass : O codigo do album cujo sera removida uma foto.
   \return Um int que funciona como contador:\n
     PO -  O numero de fotos do usuario atualizado. \n
     -1 -  Erro de Banco de dados.\n
	 -2 -  Album nao existente.
*/
int RetiraFoto_PA (const char* CpfPass, const char* CodigPass);

/*! \fn ExtPF int AddFoto_PA (const char* CpfPass, char* CodigPass)
   \brief Responsavel por incrementae o numero de fotos desse usuario.
   \param CpfPass : O cpf do ususario dono o album pertence.
   \param CodigPass : O codigo do album cujo sera adcionado uma foto.
   \return Um int que funciona como contador:\n
     PO -  O numero de fotos do usuario atualizado. \n
     -1 -  Erro de Banco de dados.\n
	 -2 -  Album nao existente.
*/
ExtPA int AddFoto_PA (const char* CpfPass,const char* CodigPass);


/*! \fn ExtPF int NumeroFotosAlbum_PA (const char* CpfPass, const char* CodigPass)
   \brief Responsavel por retornar o numero de fotos desse usuario.
   \param CpfPass : O cpf do ususario dono o album pertence.
   \param CodigPass : O codigo do album cujo sera adcionado uma foto.
   \return Um int que funciona como contador:\n
     PO -  O numero de fotos do usuario.\n
     -1 -  Erro de Banco de dados.\n
	 -2 -  Album nao existente.
*/
ExtPA int NumeroFotosAlbum_PA (const char* CpfPass, const char* CodigPass);


/*! \fn ExtPU int ListaPublicos_PA (Album_PA *AlbumPass, int Pulo)
   \brief Responsavel por atualizar os dados do usuario com os dados da struct que foi passada.
   \param AlbumPass : uma struct que sera prechida com os dados do primerio usuario publico.
   \param Pulo : da um pulo para 1 registro depois o ultimo que foi pego.
   \return Um int que funciona como contador:\n
     PO -  A posic do regitro pego. \n
     -1 -  Erro de Banco de dados.\n
	 -2 -  Nao a mais Publicos.
*/
ExtPA int ListaPublicos_PA(Album_PA *AlbumPass, int Pulo);

/*! \fn ExtPU int ListaPublicos_PA (Album_PA *AlbumPass, int Pulo)
   \brief Responsavel por atualizar os dados do usuario com os dados da struct que foi passada.
   \param AlbumPass : uma struct que sera prechida com os dados do primerio usuario publico.
   \param Pulo : da um pulo para 1 registro depois o ultimo que foi pego.
   \return Um int que funciona como contador:\n
     PO -  A posic do regitro pego. \n
     -1 -  Erro de Banco de dados.\n
	 -2 -  Nao a mais Publicos.
*/
ExtPA int ListaAlbuns_PA (Album_PA *AlbumPass, int Pulo, const char* CpfPass);

#endif
